public class singleNumber {
    public int singleNumber(int[] nums){
        //只出现一次的数字，其余数字出现两次
        int res = 0;
        for(int n : nums){
            res ^= n;
        }
        return res;
    }

    public int singleNumber3(int[] nums){
        //只出现一次的数字，其余数字出现3次
        //统计所有数字的各二进制位中 1 的出现次数，并对 3 求余，结果则为只出现一次的数字。
        int res = 0;
        // 遍历32位整数的每一位，从低位到高位
        for(int i = 0; i < 32; i++){
            // 初始化当前位的和为0，用于累加所有数字在当前位的值
            int sum = 0;
            // 遍历数组中的每个数字
            for(int n : nums){
                // 将当前数字右移i位，并与1进行与操作，获取当前位的值（0或1）
                // 累加到sum中
                sum += (n >> i) & 1;
            }
            // 根据当前位的和除以3的余数，更新结果变量对应位的值
            // 如果余数为1，则结果变量对应位为1，否则为0
            res |= (sum % 3) << i;
        }
        // 返回计算得到的结果
        return res;
    }


}
